package cn.wen233.core.service.impl;

import cn.wen233.basic.exceptions.BaseException;
import cn.wen233.basic.model.Namespace;
import cn.wen233.basic.utils.IdUtils;
import cn.wen233.core.mapper.NamespaceMapper;
import cn.wen233.core.service.NamespaceService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

/**
 * 数据库命名空间service实现
 *
 * @author wenei
 * @date 2021-10-23 10:20
 */
@Service
@RequiredArgsConstructor
public class PersistenceNamespaceServiceImpl implements NamespaceService {

    private final NamespaceMapper namespaceMapper;

    @Override
    public Namespace findByNamespaceId(String namespaceId) {
        return Optional.ofNullable(namespaceMapper.selectNamespaceByNamespaceId(namespaceId)).orElse(null);
    }

    @Override
    public List<Namespace> getAll() {
        return namespaceMapper.selectAllNamespace();
    }

    @Override
    public void createNamespace(String namespaceId, String namespaceName, String description) {
        if (findByNamespaceId(namespaceId) != null) {
            throw new BaseException("命名空间%s已经存在", namespaceId);
        }
        Namespace namespace = new Namespace();
        namespace.setName(namespaceName);
        namespace.setNamespaceId(namespaceId);
        namespace.setDescription(description);
        namespaceMapper.insertNamespace(namespace);
    }

    @Override
    public void updateNamespace(String namespaceId, String namespaceName, String description) {
        Namespace entity = findByNamespaceId(namespaceId);
        entity.setName(namespaceName);
        entity.setDescription(description);
        namespaceMapper.updateNamespace(entity);
    }

    @Override
    public void deleteNamespace(String namespaceId) {
        // 查询一次避免为null
        findByNamespaceId(namespaceId);
        namespaceMapper.deleteNamespaceByNamespaceId(namespaceId);
    }
}
